<?php
namespace Monkey;

/**
 * 模块管理器\Monkey\ModuleManager
 * @package    Monkey
 * @author     HuangYi
 * @copyright  Copyright (c) 2011-07-01——2013-03-30
 * @license    New BSD License
 * @version    $Id: \Monkey\ModuleManager.php 版本号 2013-03-30 $
 */
final class ModuleManager {
    private static $_instance;
    private static $_ini_file;
    /**
     * 模块注册表（总表）
     * @var array
     * array(
     *      'modulename'  =>array(
     *                  'enable'    =>true, //是否启用模块
     *       ),
     * )
     */
    private static $_modules;
    private function __construct() {
        self::$_ini_file = $file = SYSTEM.'/config/module.ini.php';
        self::$_modules = file_exists($file) ? fileReadSerialize($file) : array() ;//将来改为从数据库中读取（透过缓存）
    }
    private function __clone() { }
    public static function _instance(){
        !self::$_instance and self::$_instance=new self();
        return self::$_instance;
    }
    /**
     * 保存模块注册表
     */
    public function save(){
        fileSaveSerialize(self::$_ini_file, self::$_modules);
    }
    /**
     * 添加模块
     * @param string $module_name 模块名
     * @param string $module_reg 模块注册表
     * @return bool
     */
    public function post($module_name,$module_reg){
        if(isset(self::$_modules[$module_name]))return false;
        self::$_modules[$module_name]=$module_reg;
        return true;
    }
    /**
     * 读取模块
     * @param string $module_name 模块名，为空时返回整个模块注册总表
     * @return array $module 模块注册项数组
     */
    public function get($module_name=null){
        if(is_null($module_name)) return self::$_modules;
        if(isset(self::$_modules[$module_name]))return self::$_modules[$module_name];
        return array();
    }
    /**
     * 移除模块
     * @param string $module_name 模块名
     * @return bool
     */
    public function delete($module_name){
        if(!isset(self::$_modules[$module_name]))return false;
        unset(self::$_modules[$module_name]);
        return true;
    }
    /**
     * 更新模块
     * @param string $module_name 模块名
     * @param string $module_reg 模块注册表
     * @return bool
     */
    public function put($module_name,$module_reg){
        if(!isset(self::$_modules[$module_name]))return false;
        self::$_modules[$module_name]=$module_reg;
        return true;
    }
}
